method set
https://gyazo.com/89f56d013214ca8403eade8cd110f736
型はそれに応じたmethod setを持っている。
仕様書にmay haveとあるけど実際には常に持っている
method setはその型が実装するinterfaceを決定する。
また、method setはその型の値をレシーバとして呼び出すことのできるメソッドの集合を決定する。
A method call x.m() is valid if the method set of (the type of) x contains m and the argument list can be assigned to the parameter list of m.
型の種類に応じたmethod setの決まりかた:
interface type以外の型 T →レシーバ型Tで宣言された全てのメソッドからなる
Tへのpointer型 *T→レシーバ型Tまたは*Tで宣言された全てのメソッドからなる
Sの埋め込みフィールドに型Tのフィールドがあるとき→
SのメソッドセットはTのメソッドセットを含む
*Sのメソッドセットは*Tのメソッドセットを含む
Sの埋め込みフィールドに型*Tのフィールドがあるとき→
S及び*Sのメソッドセットは*Tのメソッドセットを含む
TODO: 仕様書のこの部分の記述の歯切れが悪いので整理する必要がある